'use strict';
var vk; // 全局vk实例
// 涉及的表名
// const dbName = {
// 	test: "vk-test", // 测试表
// };
const dbName = "jwc-xscj-obj";
var db = uniCloud.database(); // 全局数据库引用
var _ = db.command; // 数据库操作符
var $ = _.aggregate; // 聚合查询操作符
/**
 * 权限注意：访问以下链接查看
 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#内置权限
 */
var cloudObject = {
	isCloudObject: true, // 标记为云对象模式
	/**
	 * 请求前处理，主要用于调用方法之前进行预处理，一般用于拦截器、统一的身份验证、参数校验、定义全局对象等。
	 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#before-预处理
	 */
	_before: async function() {
		vk = this.vk; // 将vk定义为全局对象
		// let { customUtil, uniID, config, pubFun } = this.getUtil(); // 获取工具包
	},
	/**
	 * 请求后处理，主要用于处理本次调用方法的返回结果或者抛出的错误
	 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#after-后处理
	 */
	_after: async function(options) {
		let { err, res } = options;
		if (err) {
			return; // 如果方法抛出错误，直接return;不处理
		}
		return res;
	},
	/**
	 * 批量审核新媒体任务函数 
	 * @url admin/gsxy/jwc-xscj/jwc-xscjtj-obj.deletePlWxryWzLists 前端调用的url参数地址
	 */
	deletePlWxryWzLists: async function(data) {
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		//let userInfo = await this.getUserInfo(); // 获取当前登录的用户信息s
		//console.log("请求参数", data);
		
		// 业务逻辑开始-----------------------------------------------------------
		let res = { code: 0, msg: '' };
		let {_ids} = data;
		// 参数非空检测
		if (vk.pubfn.isNullOne(_ids)) {
			return { code: -1, msg: '参数错误' };
		}

		//1.批量删除
		// 返回被删除的记录条数
		res.num = await vk.baseDao.del({
		  dbName:dbName,
		  whereJson:{
			_id:_.in(_ids)
		  }
		});

		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/gsxy/jwc-xscj/jwc-xscjtj-obj.deleteWxryWzListOne 前端调用的url参数地址
	 */
	deleteWxryWzListOne: async function(data) {
		let { uid, filterResponse, originalParam } = this.getClientInfo(); // 获取客户端信息
		let res = { code: 0, msg: '' };
		// 业务逻辑开始-----------------------------------------------------------
		//console.log("请求参数", data);
		// 业务逻辑开始-----------------------------------------------------------
		// 这里id不传默认设置成"___" 是为了防止因未传_id导致误删所有数据.
		let { _id } = data;
		if(vk.pubfn.isNull(_id)){
			return { code : -1, msg : 'id不能为空' };
		}
		res.num = await vk.baseDao.deleteById({
			dbName,
			id:_id
		});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/gsxy/jwc-xscj/jwc-xscjtj-obj.updateWxryWzListOne 前端调用的url参数地址
	 */
	updateWxryWzListOne: async function(data) {
		let { uid, filterResponse, originalParam } = this.getClientInfo(); // 获取客户端信息
		let res = { code: 0, msg: '' };
		// 业务逻辑开始-----------------------------------------------------------
		//console.log("请求参数", data);
		let updateId = data._id
		Reflect.deleteProperty(data,'_id')
		// 此处应该还需要判断下mobile和username是否已存在等参数校验逻辑和
		//let register_date = new Date().getTime();
		res.newInfo = await vk.baseDao.updateById({
		  dbName:dbName,
		  id:updateId,
		  dataJson:{
		    ...data
		  }
		});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/gsxy/jwc-xscj/jwc-xscjtj-obj.addWxryWzListOne 前端调用的url参数地址
	 */
	addWxryWzListOne: async function(data) {
		let { uid, filterResponse, originalParam } = this.getClientInfo(); // 获取客户端信息
		let res = { code: 0, msg: '' };
		// 业务逻辑开始-----------------------------------------------------------
		res.data = data
		
		// if(data._id){
		// 	let updateId = data._id
		// 	Reflect.deleteProperty(data,'_id')
		// 	// 此处应该还需要判断下mobile和username是否已存在等参数校验逻辑和
		// 	//let register_date = new Date().getTime();
		// 	res.newInfo = await vk.baseDao.updateById({
		// 	  dbName:dbName,
		// 	  id:updateId,
		// 	  dataJson:{
		// 	    ...data
		// 	  }
		// 	});
		// }else{
		// 	//console.log("请求参数", data);
		// 	res.id = await vk.baseDao.add({
		// 	  dbName:dbName,// 表名
		// 	  dataJson:{ // 需要新增的数据 json格式
		// 		...data
		// 	  }
		// 	});
		// }

		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/gsxy/jwc-xscj/jwc-xscjtj-obj.getWxryWzListList 前端调用的url参数地址 
	 */
	getWxryWzListList: async function(data) {
		let { uid, filterResponse, originalParam } = this.getClientInfo(); // 获取客户端信息
		let res = { code: 0, msg: '' };
		// 业务逻辑开始-----------------------------------------------------------
		//console.log("请求参数", data);
		res = await vk.baseDao.getTableData({
		  dbName,
		  data
		});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/gsxy/jwc-xscj/jwc-xscjtj-obj.getWxryWzListListtj 前端调用的url参数地址 
	 */
	getWxryWzListListtj: async function(data) {
		let { uid, filterResponse, originalParam } = this.getClientInfo(); // 获取客户端信息
		let res = { code: 0, msg: '' };
		// 业务逻辑开始-----------------------------------------------------------
		//console.log("请求参数", data);
		res = await vk.baseDao.getTableData({
		  dbName,
		  data,
		  groupJson: {
		    _id: "$sfzh", // _id是分组id（_id:为固定写法，必填属性），这里指按user_id字段进行分组
			sfzh: _.$.first("$sfzh"), 
			xm: _.$.first("$xm"), 
		    bjmc: _.$.first("$bjmc"), 
			kq: _.$.first("$kq"),
			fspm: _.$.first("$fspm"),
			pjcj: _.$.avg("$cj"), //.toFixed(2)
		    zhcj: _.$.sum("$cj"), //
		    //count: _.$.sum(1), 
		  },
		  sortArr: [{ name:"bj", type:"desc" },{ name:"zhcj", type:"desc" }], // 对分组后的结果进行排序
		});
		
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 获取列表
	 * @url admin/gsxy/jwc-xscj/jwc-xscjtj-obj.getListtj 前端调用的url参数地址
	 */
	getListtj: async function(data) {
		let res = { code: 0, msg: '' };
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
		res.data = await vk.baseDao.selects({
		  dbName: "jwc-xscj-obj",
		  getCount:true, // 是否需要同时查询满足条件的记录总数量，默认false
		  getMain:true, // 是否只返回rows数据，默认false
		  pageIndex: 1,
		  pageSize: -1,
		  // 主表where条件
		  whereJson: {
			kq:data.kqtemp
		  },
		  groupJson: {
		    _id: "$sfzh", // _id是分组id（_id:为固定写法，必填属性），这里指按user_id字段进行分组
			sfzh: _.$.first("$sfzh"), 
			xm: _.$.first("$xm"), 
		    bjmc: _.$.first("$bjmc"), 
			kq: _.$.first("$kq"),
			pjcj: _.$.avg("$cj"), //.toFixed(2)
		    zhcj: _.$.sum("$cj") //
		  },
		  sortArr: [{ name:"bjmc", type:"desc" },{ name:"zhcj", type:"desc" }], // 对分组后的结果进行排序_add_time
		  // 最后的where，（分组后的筛选）主要用于对分组后的结果再进行筛选 如：筛选金额大于1000才能上榜（这里的lastWhereJson在数据量大的情况下是有性能问题的，（建议主表的where条件中先进行筛选，如只查本季度数据，只要主表过滤完后数据量不大，则没有性能问题。）
		  lastWhereJson:{
		   // payment_amount:_.gt(1000)
		  }
		});
		let bjinfo='';
		let innn = 0;
		for (let s of res.data) {
			if(s.bjmc == bjinfo){
				innn+=1;
				// 返回被修改的记录条数a
				await vk.baseDao.update({
				  dbName:"jwc-xscj-obj", // 表名
				  whereJson:{ // 条件
				    sfzh:s.sfzh
				  },
				  dataJson:{ // 需要修改的数据
				    fspm:innn
				  }
				});
				//rowsa.push(s);
			}else{
				bjinfo = s.bjmc;
				innn = 1;
				await vk.baseDao.update({
				  dbName:"jwc-xscj-obj", // 表名
				  whereJson:{ // 条件
				    sfzh:s.sfzh
				  },
				  dataJson:{ // 需要修改的数据
				    fspm:innn
				  }
				});
			}
		}
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	}
};

module.exports = cloudObject;
